package com.hrbxlh.task;

import com.hrbxlh.util.ConfigFileUtil;
import com.hrbxlh.util.DateUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.logging.Logger;

/**
 * Created by Administrator on 2017/12/8.
 */
@Component
public class DelDownLoadTask {
    Logger logger = Logger.getLogger(DelDownLoadTask.class.getName());
    /**
     * 定时计算。每天凌晨 01:00 执行一次
     * @description 删除要下载的zip包但是两天前的文件，以及空的文件夹（工号文件夹）
     */
    @Scheduled(cron = "0 0 1 * * *")
    public void delDownloadZips(){
        logger.info("执行删除文件操作，日期为："+DateUtil.getDateStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
        delBeforeFileZip();
    }

    /**
     * @description 删除服务器上的文件信息
     * */
    public  void delBeforeFileZip(){
        try {
            //得到tomcat文件路径地址
            Map<String, Object> urlmap = ConfigFileUtil.getFileMessage("UtilFile.properties", new String[] {"server_address", "project_name","tomcatUrl"});
            String url = (String)urlmap.get("tomcatUrl")+(String)urlmap.get("project_name")+"upload/course/download";
            //删除文件信息
            getFileList(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * @description 删除某文件夹下的文件等信息
     * @param 删除文件的路径
     * */
    public  void getFileList(String strPath) {
        try {
            File dir = new File(strPath);
            File[] files = dir.listFiles();
            if (files != null) {
                String fileName;
                //当前日期
                String nowDate = DateUtil.getDateStr(new Date(), "yyyy年MM月dd日");
                SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
                for (int i = 0; i < files.length; i++) {
                    fileName = files[i].getName();
                    // 判断是文件还是文件夹
                    if (files[i].isDirectory()) {
                        getFileList(files[i].getAbsolutePath());
                        //删除没有文件的文件夹
                        if(files[i].listFiles().length == 0){
                            files[i].delete();
                        }
                    } else {
                        delFile(files[i], nowDate, format);
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * @description 删除文件的方法，将两天以及两天以前的文件全部删除掉
     * @param file 要判定的文件
     * @param nowDate 当前日期  ，，年，，月，，日格式的今天的日期字符串
     * @param format 类型是..年，，月，，日格式
     * */
    private  void delFile(File file, String nowDate, SimpleDateFormat format) throws ParseException {
        //当前时间
        String dbtime1 = nowDate;
        //文件前缀时间
        String dbtime2 = file.getName().split("-")[0];
        int days = Math.abs((int) ((format.parse(dbtime1).getTime() - format.parse(dbtime2).getTime()) / (1000 * 3600 * 24)));
        if (days >= 2) {
            logger.info("删除文件："+file.getName());
            //删除文件
            file.delete();
        }
    }

//    /**
//     * 心跳更新。启动时执行一次，之后每隔2秒执行一次
//     */
//    @Scheduled(fixedRate = 1000*2)
//    public void print(){
//       org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(DelDownLoadTask.class.getName());
//        logger.info("@@@@@@@@@Annotation：print run  2miao");
//    }


    public static void main(String[] args) {
        DelDownLoadTask dd = new DelDownLoadTask();
        dd.delBeforeFileZip();
    }


}
